package sort;

/**
 * 插入排序
 * InsertionSort
 */
public class InsertionSort implements Sort {

    /**
     * 一般来说，插入排序都采用in-place在数组上实现。具体算法描述如下：
     *
     *       1. 从第一个元素开始，该元素可以认为已经被排序；
     *       2. 取出下一个元素，在已经排序的元素序列中从后向前扫描；
     *       3. 如果该元素（已排序）大于新元素，将该元素移到下一位置；
     *       4. 重复步骤3，直到找到已排序的元素小于或者等于新元素的位置；
     *       5. 将新元素插入到该位置后；
     *       6. 重复步骤2~5。
     */
	@Override
	public void sort(int[] array) {

        int preIndex,current;
        for (int i = 1; i < array.length; i++) {
            preIndex = i-1;
            current = array[i];
            while (preIndex >= 0 && array[preIndex] > current ) {
                array[preIndex+1] = array[preIndex];
                preIndex--;
            }
            array[preIndex+1] = current;
        }
    }

}